# bs4 进行数据解析
#一 实例化一个beautifulsoup对象，并且将页面院内数据加载到该对象中
#二 通过调用beautifulsoup对象中的相关属性或者方法进行标签定位和数据提取
# 环境安装
  # pip install bs4
  #pip install lxml   #解析器  不仅在bs4 在xpath里面也会用到
# d对象的实例化
# from bs4 import BeautifulSoup
                # 1 将本地的html文档的数据加载到该对象中
                  #  fp=open('./test.html','r',encodding='utf-8')
                  #  soup = BeautifulSoup(fp,'lxml')
#               2 将富连网上的网页源代码加载到该对象中
                  # page_text= response.text
                  # soup = BeautifulSoup(page_text,'lxml')
                  #print(soup)

# _ 提供的用于数据解析的方法和属性
# soup.tagName :返回的是文档中第一次出现的tagname出现的标签
  # soup.a ！！！标签值是网页中标签
  # print(soup.a)
# soup.find(a) :查找第一次出a标签的内容， 与 soup.a 同样作用
  # soup.find(‘a’，class_='song') 属性定位 注意下划线  (a标签在class=song的下面)
# soup.find_all('a') :返回符合要求的所有标签(列表)的内容

# select
# select('某种选择器(id,class,标签。。。。。选择器)')   返回时一个列表
  # soup.select ('.tang > ul > li >a'): >表示一个层级,类选择器  .表示class
  #soup.select ('.tang > ul > li >a')[0]   取得第一个标签的内容，定位属性下标
  # oup.select('.tang>ul a'): 空格表示的多个层级

#  获取标签中的文本数据
#     soup.a.text/string/get_text()
#      string :获取标签属性直系的文本内容
#     text/get_text():  可以获取某个标签中的所有文本内容
# 获取标签中的属性值a[0
# ]
#  soup.a.['href']



# 需求爬取三国演义小说所有章节内容和标题
import requests
from bs4 import BeautifulSoup
if __name__ =="__main__":       #固定格式
   # 对首页数据进行爬取

   headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'}
   url='https://www.shicimingju.com/book/sanguoyanyi.html'
   page_text=requests.get(url=url,headers=headers).text

   #在首页中解析出章节的标题和详情页的url
   # 实例化BeautifulSoup对象，需要将页面源代码数据加载到该对象中
   soup=BeautifulSoup(page_text,'lxml')
   #解析章节标题和详情页的url
   li_list=soup.select('.book-mulu > ul >li')  #返回时列表  >表示一个层级  。表示class
   fp=open('./sanguoyanyi.txt','w',encoding='utf-8')  #保存文件步骤
   for li in li_list:
       title=li.a.string   #定位a 标签的文本内容
       detail_url='https://www.shicimingju.com'+li.a['href']  #详情页 拼成一个完整的地址
       #对详情页发起请求，解析章节内容
       detail_page_text= requests.get(url=detail_url,headers=headers).text   #详情页的内容
       #解析出详情页的文本内容
       detail_soup=BeautifulSoup(detail_page_text,'lxml')
       div_tag=detail_soup.find('div',class_='chapter_content')
       #解析到了章节的内容
       content=div_tag.text
       fp.write(title+':'+content+'\n')  #
       print(title,'爬取成功')

       # 持久化存储


